#include<iostream>
#include<pthread.h>
#include<unistd.h>
#include<cstdio>

void*func(void* argv)
{
    while(true)
    {
        std::cout<<"子线程运行中 "<<std::endl;
        sleep(1);
    }
}


int main()
{
    pthread_t tid;
    pthread_create(&tid, nullptr, func, nullptr);

    sleep(5);
    pthread_cancel(tid);
    void* ret=nullptr;
    pthread_join(tid, &ret);
    std::cout<<"子线程退出信息："<<(long long int)ret<<std::endl;
    return 0;
}
// void* func(void* arg) 
// {
//     printf("子线程正在运行\n");
//     pthread_exit((void*)42); // 终止线程并返回值42
// }

// int main() 
// {
//     pthread_t tid;
//     void* retval;
//     pthread_create(&tid, NULL, func, NULL);
//     pthread_join(tid, &retval); // 获取子线程的退出值
//     printf("子线程返回: %ld\n", (long)retval); // 输出42
//     return 0;
// }

// int *ptr=nullptr;
// void* func1(void*_name)
// {
//     std::string name=static_cast<const char*>(_name);
//     int a=100;//临时变量，在栈上面
//     ptr=&a;
//     while(true)
//     {
//         std::cout<<name<<"线程运行: "<<a<<std::endl;
//         sleep(1);
//     }
// }

// void* func2(void *_name)
// {
//     std::string name=static_cast<const char*>(_name);
//     while(true)
//     {
//         if(ptr!=nullptr)//防止func2先运行此时ptr还为空直接越界访问
//             std::cout<<name<<"线程运行: "<<(*ptr)++<<std::endl;
//         sleep(1);
//     }
// }
// int main()
// {
//     pthread_t tid1,tid2;
//     pthread_create(&tid1,nullptr,func1,(void*)"pthread-1");
//     pthread_create(&tid2,nullptr,func2,(void*)"pthread-2");
//     pthread_join(tid1,nullptr);
//     pthread_join(tid2,nullptr);
//     return 0;
// }